<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
<meta name="generator" content="pdoc 0.9.2" />
<title>ascend.common.align API documentation</title>
<meta name="description" content="Copyright 2020 Huawei Technologies Co., Ltd
Licensed under the Apache License, Version 2.0 (the &#34;License&#34;);
you may not use this file except in …" />
<link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/sanitize.min.css" integrity="sha256-PK9q560IAAa6WVRRh76LtCaI8pjTJ2z11v0miyNNjrs=" crossorigin>
<link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/typography.min.css" integrity="sha256-7l/o7C8jubJiy74VsKTidCy1yBkRtiUGbVkYBylBqUg=" crossorigin>
<link rel="stylesheet preload" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.1/styles/github.min.css" crossorigin>
<style>:root{--highlight-color:#fe9}.flex{display:flex !important}body{line-height:1.5em}#content{padding:20px}#sidebar{padding:30px;overflow:hidden}#sidebar > *:last-child{margin-bottom:2cm}.http-server-breadcrumbs{font-size:130%;margin:0 0 15px 0}#footer{font-size:.75em;padding:5px 30px;border-top:1px solid #ddd;text-align:right}#footer p{margin:0 0 0 1em;display:inline-block}#footer p:last-child{margin-right:30px}h1,h2,h3,h4,h5{font-weight:300}h1{font-size:2.5em;line-height:1.1em}h2{font-size:1.75em;margin:1em 0 .50em 0}h3{font-size:1.4em;margin:25px 0 10px 0}h4{margin:0;font-size:105%}h1:target,h2:target,h3:target,h4:target,h5:target,h6:target{background:var(--highlight-color);padding:.2em 0}a{color:#058;text-decoration:none;transition:color .3s ease-in-out}a:hover{color:#e82}.title code{font-weight:bold}h2[id^="header-"]{margin-top:2em}.ident{color:#900}pre code{background:#f8f8f8;font-size:.8em;line-height:1.4em}code{background:#f2f2f1;padding:1px 4px;overflow-wrap:break-word}h1 code{background:transparent}pre{background:#f8f8f8;border:0;border-top:1px solid #ccc;border-bottom:1px solid #ccc;margin:1em 0;padding:1ex}#http-server-module-list{display:flex;flex-flow:column}#http-server-module-list div{display:flex}#http-server-module-list dt{min-width:10%}#http-server-module-list p{margin-top:0}.toc ul,#index{list-style-type:none;margin:0;padding:0}#index code{background:transparent}#index h3{border-bottom:1px solid #ddd}#index ul{padding:0}#index h4{margin-top:.6em;font-weight:bold}@media (min-width:200ex){#index .two-column{column-count:2}}@media (min-width:300ex){#index .two-column{column-count:3}}dl{margin-bottom:2em}dl dl:last-child{margin-bottom:4em}dd{margin:0 0 1em 3em}#header-classes + dl > dd{margin-bottom:3em}dd dd{margin-left:2em}dd p{margin:10px 0}.name{background:#eee;font-weight:bold;font-size:.85em;padding:5px 10px;display:inline-block;min-width:40%}.name:hover{background:#e0e0e0}dt:target .name{background:var(--highlight-color)}.name > span:first-child{white-space:nowrap}.name.class > span:nth-child(2){margin-left:.4em}.inherited{color:#999;border-left:5px solid #eee;padding-left:1em}.inheritance em{font-style:normal;font-weight:bold}.desc h2{font-weight:400;font-size:1.25em}.desc h3{font-size:1em}.desc dt code{background:inherit}.source summary,.git-link-div{color:#666;text-align:right;font-weight:400;font-size:.8em;text-transform:uppercase}.source summary > *{white-space:nowrap;cursor:pointer}.git-link{color:inherit;margin-left:1em}.source pre{max-height:500px;overflow:auto;margin:0}.source pre code{font-size:12px;overflow:visible}.hlist{list-style:none}.hlist li{display:inline}.hlist li:after{content:',\2002'}.hlist li:last-child:after{content:none}.hlist .hlist{display:inline;padding-left:1em}img{max-width:100%}td{padding:0 .5em}.admonition{padding:.1em .5em;margin-bottom:1em}.admonition-title{font-weight:bold}.admonition.note,.admonition.info,.admonition.important{background:#aef}.admonition.todo,.admonition.versionadded,.admonition.tip,.admonition.hint{background:#dfd}.admonition.warning,.admonition.versionchanged,.admonition.deprecated{background:#fd4}.admonition.error,.admonition.danger,.admonition.caution{background:lightpink}</style>
<style media="screen and (min-width: 700px)">@media screen and (min-width:700px){#sidebar{width:30%;height:100vh;overflow:auto;position:sticky;top:0}#content{width:70%;max-width:100ch;padding:3em 4em;border-left:1px solid #ddd}pre code{font-size:1em}.item .name{font-size:1em}main{display:flex;flex-direction:row-reverse;justify-content:flex-end}.toc ul ul,#index ul{padding-left:1.5em}.toc > ul > li{margin-top:.5em}}</style>
<style media="print">@media print{#sidebar h1{page-break-before:always}.source{display:none}}@media print{*{background:transparent !important;color:#000 !important;box-shadow:none !important;text-shadow:none !important}a[href]:after{content:" (" attr(href) ")";font-size:90%}a[href][title]:after{content:none}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}@page{margin:0.5cm}p,h2,h3{orphans:3;widows:3}h1,h2,h3,h4,h5,h6{page-break-after:avoid}}</style>
<link rel="preconnect" href="https://www.google.com">
<script async src="https://cse.google.com/cse.js?cx=017837193012385208679:pey8ky8gdqw"></script>
<style>
.gsc-control-cse {padding:0 !important;margin-top:1em}
body.gsc-overflow-hidden #sidebar {overflow: visible;}
</style>
<script defer src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.1/highlight.min.js" integrity="sha256-Uv3H6lx7dJmRfRvH8TH6kJD1TSK1aFcwgx+mdg3epi8=" crossorigin></script>
<script>window.addEventListener('DOMContentLoaded', () => hljs.initHighlighting())</script>
<style>.homelink{display:block;font-size:2em;font-weight:bold;color:#555;padding-bottom:.5em;border-bottom:1px solid silver}.homelink:hover{color:inherit}.homelink img{max-width:20%;max-height:5em;margin:auto;margin-bottom:.3em}</style>
<link rel="canonical" href="https://bazige.github.io/ascend/common/align.html">
<link rel="icon" href="https://bazige.github.io/ascend/logo/logo.png"">
</head>
<body>
<main>
<article id="content">
<header>
<h1 class="title">Module <code>ascend.common.align</code></h1>
</header>
<section id="section-intro">
<p>Copyright 2020 Huawei Technologies Co., Ltd
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
<a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.</p>
<details class="source">
<summary>
<span>Expand source code</span>
<a href="https://github.com/pdoc3/pdoc/blob/37c907488ff52b174ab602690d1166f28bded9a2/ascend/common/align.py#L0-L128" class="git-link">Browse git</a>
</summary>
<pre><code class="python">#!/usr/bin/env python3
# -*- coding: utf-8 -*-
&#34;&#34;&#34;
Copyright 2020 Huawei Technologies Co., Ltd
Licensed under the Apache License, Version 2.0 (the &#34;License&#34;);
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an &#34;AS IS&#34; BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
&#34;&#34;&#34;

from .const import *

GRAY_CHN = [
    PIXEL_FORMAT_YUV_400
]

SEMI_CHN = [
    PIXEL_FORMAT_YUV_SEMIPLANAR_420,
    PIXEL_FORMAT_YVU_SEMIPLANAR_420
]

TWO_CHN = [
    PIXEL_FORMAT_YUV_SEMIPLANAR_422,
    PIXEL_FORMAT_YVU_SEMIPLANAR_422,
    PIXEL_FORMAT_YUYV_PACKED_422,
    PIXEL_FORMAT_UYVY_PACKED_422,
    PIXEL_FORMAT_YVYU_PACKED_422,
    PIXEL_FORMAT_VYUY_PACKED_422
]

THR_CHN = [
    PIXEL_FORMAT_YUV_SEMIPLANAR_444,
    PIXEL_FORMAT_YVU_SEMIPLANAR_444,
    PIXEL_FORMAT_YUV_PACKED_444,
    PIXEL_FORMAT_RGB_888,
    PIXEL_FORMAT_BGR_888
]

FUR_CHN = [
    PIXEL_FORMAT_ARGB_8888,
    PIXEL_FORMAT_ABGR_8888,
    PIXEL_FORMAT_RGBA_8888,
    PIXEL_FORMAT_BGRA_8888
]


def aligned(value, func=&#39;vdec&#39;, aligned=&#39;w&#39;):
    &#34;&#34;&#34;Align specific size of &#39;w&#39; or &#39;h&#39; according to input func.

    Args:
        value (int): Input value to be aligned.
        func (str, optional): Alinged method for specified function. Defaults to &#39;vdec&#39;.
        aligned (str, optional): Aligne `w` or `h`. Defaults to &#39;w&#39;.
    
    Raises:
        ValueError: Input `func` not in [&#39;jpegd&#39;, &#39;pngd&#39;, &#39;vdec&#39;, &#39;resize&#39;, &#39;crop&#39;, &#39;crop_and_paste&#39;, &#39;encode&#39;]
        ValueError: Input aligned not in [&#39;w&#39;, &#39;h&#39;]

    Returns:
        [int]: A aligned value.
    &#34;&#34;&#34;
    if func not in [&#39;jpegd&#39;, &#39;pngd&#39;, &#39;vdec&#39;, &#39;resize&#39;, &#39;crop&#39;, &#39;crop_and_paste&#39;, &#39;encode&#39;]:
        raise ValueError(
            f&#34;Aligned func only support:&#39;jpegd&#39;,&#39;vdec&#39;,&#39;resize&#39;,&#39;crop&#39;,&#39;crop_and_paste&#39;.&#34;)

    if aligned not in [&#39;w&#39;, &#39;h&#39;]:
        raise ValueError(f&#34;Aligned func only support w or h aligned.&#34;)

    if func == &#39;jpegd&#39; or func == &#39;pngd&#39;:
        if aligned == &#39;w&#39;:
            alignment = 128
        else:
            alignment = 16
    else:
        if aligned == &#39;w&#39;:
            alignment = 16
        else:
            alignment = 2

    formal = ((value + alignment - 1) // alignment) * alignment
    return formal


def calc_size(width, height, iformat):
    &#34;&#34;&#34;Caculating image nbytes according input width and height.

    Args:
        width (int): Aligned image width.
        height (int): Aligned image height.
        iformat (int): Image formats, see common/const.py for details.

    Returns:
        [int]: The caculated image size.
    &#34;&#34;&#34;
    if not (isinstance(width, int) and width &gt; 0):
        raise TypeError(
            f&#34;input width expects an positive int, but got {type(width)}.&#34;)

    if not (isinstance(height, int) and height &gt; 0):
        raise TypeError(
            f&#34;input height expects an positive int, but got {type(height)}.&#34;)

    if not isinstance(iformat, int):
        raise TypeError(
            f&#34;input iformat expects an int, but got {type(iformat)}.&#34;)

    if width &lt;= 0 or height &lt;= 0:
        width = 0
        height = 0

    if iformat in GRAY_CHN:
        size = width * height
    elif iformat in SEMI_CHN:
        size = width * height * 3 // 2
    elif iformat in TWO_CHN:
        size = width * height * 2
    elif iformat in THR_CHN:
        size = width * height * 3
    elif iformat in FUR_CHN:
        size = width * height * 4
    else:
        raise ValueError(f&#34;Input data format:{iformat} is invalid.&#34;)

    return size</code></pre>
</details>
</section>
<section>
</section>
<section>
</section>
<section>
<h2 class="section-title" id="header-functions">Functions</h2>
<dl>
<dt id="ascend.common.align.aligned"><code class="name flex">
<span>def <span class="ident">aligned</span></span>(<span>value, func='vdec', aligned='w')</span>
</code></dt>
<dd>
<div class="desc"><p>Align specific size of 'w' or 'h' according to input func.</p>
<h2 id="args">Args</h2>
<dl>
<dt><strong><code>value</code></strong> :&ensp;<code>int</code></dt>
<dd>Input value to be aligned.</dd>
<dt><strong><code>func</code></strong> :&ensp;<code>str</code>, optional</dt>
<dd>Alinged method for specified function. Defaults to 'vdec'.</dd>
<dt><strong><code>aligned</code></strong> :&ensp;<code>str</code>, optional</dt>
<dd>Aligne <code>w</code> or <code>h</code>. Defaults to 'w'.</dd>
</dl>
<h2 id="raises">Raises</h2>
<dl>
<dt><code>ValueError</code></dt>
<dd>Input <code>func</code> not in ['jpegd', 'pngd', 'vdec', 'resize', 'crop', 'crop_and_paste', 'encode']</dd>
<dt><code>ValueError</code></dt>
<dd>Input aligned not in ['w', 'h']</dd>
</dl>
<h2 id="returns">Returns</h2>
<dl>
<dt><code>[int]</code></dt>
<dd>A aligned value.</dd>
</dl></div>
<details class="source">
<summary>
<span>Expand source code</span>
<a href="https://github.com/pdoc3/pdoc/blob/37c907488ff52b174ab602690d1166f28bded9a2/ascend/common/align.py#L52-L86" class="git-link">Browse git</a>
</summary>
<pre><code class="python">def aligned(value, func=&#39;vdec&#39;, aligned=&#39;w&#39;):
    &#34;&#34;&#34;Align specific size of &#39;w&#39; or &#39;h&#39; according to input func.

    Args:
        value (int): Input value to be aligned.
        func (str, optional): Alinged method for specified function. Defaults to &#39;vdec&#39;.
        aligned (str, optional): Aligne `w` or `h`. Defaults to &#39;w&#39;.
    
    Raises:
        ValueError: Input `func` not in [&#39;jpegd&#39;, &#39;pngd&#39;, &#39;vdec&#39;, &#39;resize&#39;, &#39;crop&#39;, &#39;crop_and_paste&#39;, &#39;encode&#39;]
        ValueError: Input aligned not in [&#39;w&#39;, &#39;h&#39;]

    Returns:
        [int]: A aligned value.
    &#34;&#34;&#34;
    if func not in [&#39;jpegd&#39;, &#39;pngd&#39;, &#39;vdec&#39;, &#39;resize&#39;, &#39;crop&#39;, &#39;crop_and_paste&#39;, &#39;encode&#39;]:
        raise ValueError(
            f&#34;Aligned func only support:&#39;jpegd&#39;,&#39;vdec&#39;,&#39;resize&#39;,&#39;crop&#39;,&#39;crop_and_paste&#39;.&#34;)

    if aligned not in [&#39;w&#39;, &#39;h&#39;]:
        raise ValueError(f&#34;Aligned func only support w or h aligned.&#34;)

    if func == &#39;jpegd&#39; or func == &#39;pngd&#39;:
        if aligned == &#39;w&#39;:
            alignment = 128
        else:
            alignment = 16
    else:
        if aligned == &#39;w&#39;:
            alignment = 16
        else:
            alignment = 2

    formal = ((value + alignment - 1) // alignment) * alignment
    return formal</code></pre>
</details>
</dd>
<dt id="ascend.common.align.calc_size"><code class="name flex">
<span>def <span class="ident">calc_size</span></span>(<span>width, height, iformat)</span>
</code></dt>
<dd>
<div class="desc"><p>Caculating image nbytes according input width and height.</p>
<h2 id="args">Args</h2>
<dl>
<dt><strong><code>width</code></strong> :&ensp;<code>int</code></dt>
<dd>Aligned image width.</dd>
<dt><strong><code>height</code></strong> :&ensp;<code>int</code></dt>
<dd>Aligned image height.</dd>
<dt><strong><code>iformat</code></strong> :&ensp;<code>int</code></dt>
<dd>Image formats, see common/const.py for details.</dd>
</dl>
<h2 id="returns">Returns</h2>
<dl>
<dt><code>[int]</code></dt>
<dd>The caculated image size.</dd>
</dl></div>
<details class="source">
<summary>
<span>Expand source code</span>
<a href="https://github.com/pdoc3/pdoc/blob/37c907488ff52b174ab602690d1166f28bded9a2/ascend/common/align.py#L89-L129" class="git-link">Browse git</a>
</summary>
<pre><code class="python">def calc_size(width, height, iformat):
    &#34;&#34;&#34;Caculating image nbytes according input width and height.

    Args:
        width (int): Aligned image width.
        height (int): Aligned image height.
        iformat (int): Image formats, see common/const.py for details.

    Returns:
        [int]: The caculated image size.
    &#34;&#34;&#34;
    if not (isinstance(width, int) and width &gt; 0):
        raise TypeError(
            f&#34;input width expects an positive int, but got {type(width)}.&#34;)

    if not (isinstance(height, int) and height &gt; 0):
        raise TypeError(
            f&#34;input height expects an positive int, but got {type(height)}.&#34;)

    if not isinstance(iformat, int):
        raise TypeError(
            f&#34;input iformat expects an int, but got {type(iformat)}.&#34;)

    if width &lt;= 0 or height &lt;= 0:
        width = 0
        height = 0

    if iformat in GRAY_CHN:
        size = width * height
    elif iformat in SEMI_CHN:
        size = width * height * 3 // 2
    elif iformat in TWO_CHN:
        size = width * height * 2
    elif iformat in THR_CHN:
        size = width * height * 3
    elif iformat in FUR_CHN:
        size = width * height * 4
    else:
        raise ValueError(f&#34;Input data format:{iformat} is invalid.&#34;)

    return size</code></pre>
</details>
</dd>
</dl>
</section>
<section>
</section>
</article>
<nav id="sidebar">
<header>
<a class="homelink" rel="home" title="ascendfly Home" href="https://gitee.com/ascend-fae/ascendfly">
<img src="https://bazige.github.io/ascend/logo/logo.png" alt=""> ascendfly
</a>
</header>
<div class="gcse-search" style="height: 70px"
data-as_oq="site:bazige.github.io inurl:github.com/ascendfly"
data-gaCategoryParameter="ascend.common.align">
</div>
<h1>Index</h1>
<div class="toc">
<ul></ul>
</div>
<ul id="index">
<li><h3>Super-module</h3>
<ul>
<li><code><a title="ascend.common" href="index.html">ascend.common</a></code></li>
</ul>
</li>
<li><h3><a href="#header-functions">Functions</a></h3>
<ul class="">
<li><code><a title="ascend.common.align.aligned" href="#ascend.common.align.aligned">aligned</a></code></li>
<li><code><a title="ascend.common.align.calc_size" href="#ascend.common.align.calc_size">calc_size</a></code></li>
</ul>
</li>
</ul>
</nav>
</main>
<footer id="footer">
<p><span style="color:#ddd">&#21328;</span></p>
<p>Generated by <a href="https://pdoc3.github.io/pdoc"><cite>pdoc</cite> 0.9.2</a>.</p>
</footer>
</body>
</html>